package client

import (
	"time"

	pbledger "hundsun.com/hsl/hschain/protos/ledger"
)

// TimeoutOption timeout option
type TimeoutOption struct {
	// 发送请求超时时间
	SendTimeout time.Duration
	// 接收应答超时时间
	WaitTimeout time.Duration
}

// ProtocolAPI 消息通道交互API接口定义
type ProtocolAPI interface {
	// 保存区块
	SaveBlock(block *pbledger.Block) error
	//
	GetBlock(num uint64) (*pbledger.Block, error)
	// 批量获取区块
	GetBlocks(start, end uint64) ([]*pbledger.Block, error)
	// 获取当前最高区块头
	GetLastBlockheader() (*pbledger.BlockHeader, error)
	//
	GetExecutedBlock(num uint64) (*pbledger.ExecutedBlock, error)
	// 批量获取执行过的区块
	GetExecutedBlocks(start, end uint64) ([]*pbledger.ExecutedBlock, error)
	// 获取最新执行区块
	GetMaxExecutedBlock() (*pbledger.ExecutedBlock, error)
	// 获取最新执行区块高度
	GetMaxExecutedBlockNumber() (uint64, error)
	//
	GetConsensusStepRecords() (*pbledger.ConsensusStepRecords, error)
}
